iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
Python

30天挑戰 LeetCode 75系列 第 3

[Day 03] LeetCode 75 - Kids With the Greatest Number of Candies

  • 分享至 

  • xImage
  •  

Kids With the Greatest Number of Candies

1431. Kids With the Greatest Number of Candies

題目敘述

給定一個整數陣列candiescandies[i]代表第i個小孩的糖果數量。另外有一個整數extraCandies,代表我有多餘的糖果數量。
回傳一個布林陣列,如果把全部的extraCandies都給第i個小孩的話,他將會有最多的糖果數量,那麼result[i]將為True;反之,則為False
以下為LeetCode上的兩個範例與條件限制。LeetCode的範例1解釋的非常清楚。
https://ithelp.ithome.com.tw/upload/images/20240917/20168060KVVQjXvwNG.png

解題思路

此題有兩種解法。

解法1 (用for迴圈,較直觀)

  • 先找出candies中最多的糖果數量。
  • 再一個一個去比對candies中的每一項,如果加上extraCandies後大於等於candies中最多的糖果數量的話,那麼輸出的陣列中此項則為True;反之則為False

解法2 (comprehension)

其實解法2用comprehension的想法跟解法1是一樣的,只是Python特有的此寫法可以讓程式碼的行數大幅降低。執行速度並不會比較快。

程式碼

解法1 (用for迴圈,較直觀)

class Solution:
    def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
        max_candy = max(candies)
        output = []
        for i in range(len(candies)):
            if candies[i] + extraCandies >= max_candy:
                output.append(True)
            else:
                output.append(False)
        return output

解法2 (comprehension)

class Solution:
    def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
        max_candy = max(candies)
        return [candies[i] + extraCandies >= max_candy for i in range(len(candies))]

小結

我認為用Comprehension表示時需要非常懂自己的程式在寫什麼,像是今天的範例他就只用了一行表達出原本七行的程式碼。建議如果是要給程式新手看的程式碼,還是把他展開來用for迴圈寫會比較清楚。


上一篇
[Day 02] LeetCode 75 - Greatest Common Divisor of Strings
下一篇
[Day 04] Leetcode 75 - Can Place Flowers
系列文
30天挑戰 LeetCode 755
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言